{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "# TensorFlow Regression Example"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Creating Data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 1 Million Points\n",
    "x_data = np.linspace(0.0,10.0,1000000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "noise = np.random.randn(len(x_data))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# y = mx + b + noise_levels\n",
    "b = 10\n",
    "\n",
    "y_true =  (2.5 * x_data ) + 15 + noise"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x11dc86c18>]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sample_indx = np.random.randint(len(x_data),size=(250))\n",
    "plt.plot(x_data[sample_indx],y_true[sample_indx],'*')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# TF Eager Execution\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "import tensorflow as tf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Set Eager API\n",
    "tf.enable_eager_execution()\n",
    "tfe = tf.contrib.eager"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "BATCH_SIZE = 1000\n",
    "BATCHS = 10000"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "def next_batch(x_data, batch_size):\n",
    "    batch_index = np.random.randint(len(x_data),size=(BATCH_SIZE))\n",
    "    x_train = x_data[batch_index]\n",
    "    y_train = y_true[batch_index]\n",
    "    return x_train, y_train"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Variables**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "w_tfe = tf.Variable(np.random.uniform())\n",
    "b_tfe = tf.Variable(np.random.uniform(1,10))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Linear regression function**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Linear regression (Wx + b)\n",
    "def linear_regression(inputs):\n",
    "    return inputs * w_tfe + b_tfe"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Lost function: MS**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "def mean_square_fn(model_fn, inputs, labels):\n",
    "    return tf.reduce_sum(tf.pow(model_fn(inputs) - labels, 2)) / (2 * BATCH_SIZE)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Optimizer**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.001)\n",
    "\n",
    "grad = tfe.implicit_gradients(mean_square_fn)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Initial cost= 301.666534424 W= 0.29334104 b= 2.6102347\n"
     ]
    }
   ],
   "source": [
    "# Initial cost\n",
    "x_train, y_train = next_batch(x_data, BATCH_SIZE)\n",
    "print(\"Initial cost= {:.9f}\".format(\n",
    "    mean_square_fn(linear_regression, x_train, y_train)),\n",
    "    \"W=\", w_tfe.numpy(), \"b=\", b_tfe.numpy())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Training**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 0001 cost= 275.481536865 W= 0.42854565 b= 2.6336372\n",
      "Epoch: 0100 cost= 16.771112442 W= 4.11131 b= 3.4798746\n",
      "Epoch: 0200 cost= 16.047227859 W= 4.1926284 b= 3.7750118\n",
      "Epoch: 0300 cost= 15.135506630 W= 4.155428 b= 4.045262\n",
      "Epoch: 0400 cost= 14.601335526 W= 4.1137743 b= 4.309869\n",
      "Epoch: 0500 cost= 12.988318443 W= 4.07434 b= 4.5675364\n",
      "Epoch: 0600 cost= 13.962398529 W= 4.0381775 b= 4.8191485\n",
      "Epoch: 0700 cost= 11.749617577 W= 3.9993713 b= 5.064703\n",
      "Epoch: 0800 cost= 11.554651260 W= 3.9644341 b= 5.3054633\n",
      "Epoch: 0900 cost= 11.580221176 W= 3.928494 b= 5.5401406\n",
      "Epoch: 1000 cost= 11.125984192 W= 3.8980548 b= 5.770336\n",
      "Epoch: 1100 cost= 10.007103920 W= 3.862554 b= 5.9936194\n",
      "Epoch: 1200 cost= 9.616973877 W= 3.8300939 b= 6.2107058\n",
      "Epoch: 1300 cost= 9.293504715 W= 3.7960896 b= 6.4219265\n",
      "Epoch: 1400 cost= 9.302433968 W= 3.7648456 b= 6.6274505\n",
      "Epoch: 1500 cost= 8.918160439 W= 3.7349737 b= 6.8296146\n",
      "Epoch: 1600 cost= 8.196873665 W= 3.700922 b= 7.025527\n",
      "Epoch: 1700 cost= 8.114662170 W= 3.6736612 b= 7.217224\n",
      "Epoch: 1800 cost= 7.420712471 W= 3.646926 b= 7.405056\n",
      "Epoch: 1900 cost= 7.244167805 W= 3.6210873 b= 7.5892572\n",
      "Epoch: 2000 cost= 7.027961254 W= 3.595361 b= 7.7688875\n",
      "Epoch: 2100 cost= 6.667112827 W= 3.5663705 b= 7.94299\n",
      "Epoch: 2200 cost= 6.635849476 W= 3.5434058 b= 8.11352\n",
      "Epoch: 2300 cost= 6.271118164 W= 3.5149488 b= 8.278675\n",
      "Epoch: 2400 cost= 6.085773945 W= 3.4919684 b= 8.440779\n",
      "Epoch: 2500 cost= 5.780133724 W= 3.4696915 b= 8.599832\n",
      "Epoch: 2600 cost= 5.293220520 W= 3.4442346 b= 8.753782\n",
      "Epoch: 2700 cost= 4.847285271 W= 3.4196973 b= 8.903981\n",
      "Epoch: 2800 cost= 4.648473740 W= 3.3974876 b= 9.051678\n",
      "Epoch: 2900 cost= 4.737245083 W= 3.3806791 b= 9.197361\n",
      "Epoch: 3000 cost= 4.325105190 W= 3.3542683 b= 9.336985\n",
      "Epoch: 3100 cost= 4.441687107 W= 3.3339086 b= 9.473751\n",
      "Epoch: 3200 cost= 4.256507874 W= 3.31495 b= 9.606302\n",
      "Epoch: 3300 cost= 4.133140564 W= 3.294693 b= 9.736195\n",
      "Epoch: 3400 cost= 3.762845039 W= 3.2755926 b= 9.86446\n",
      "Epoch: 3500 cost= 3.711015701 W= 3.2582154 b= 9.988206\n",
      "Epoch: 3600 cost= 3.403789759 W= 3.2384858 b= 10.109075\n",
      "Epoch: 3700 cost= 3.416311502 W= 3.2214046 b= 10.227655\n",
      "Epoch: 3800 cost= 3.367571354 W= 3.204864 b= 10.343255\n",
      "Epoch: 3900 cost= 3.045504808 W= 3.1882067 b= 10.45586\n",
      "Epoch: 4000 cost= 3.017071247 W= 3.1692305 b= 10.565196\n",
      "Epoch: 4100 cost= 2.872391939 W= 3.153776 b= 10.671853\n",
      "Epoch: 4200 cost= 2.893660307 W= 3.1390457 b= 10.776576\n",
      "Epoch: 4300 cost= 2.697478056 W= 3.1202095 b= 10.878318\n",
      "Epoch: 4400 cost= 2.426154852 W= 3.107227 b= 10.978092\n",
      "Epoch: 4500 cost= 2.500243902 W= 3.0942423 b= 11.074939\n",
      "Epoch: 4600 cost= 2.320518017 W= 3.078808 b= 11.169363\n",
      "Epoch: 4700 cost= 2.285497665 W= 3.0669324 b= 11.26185\n",
      "Epoch: 4800 cost= 2.077934504 W= 3.0534801 b= 11.352316\n",
      "Epoch: 4900 cost= 2.126533985 W= 3.0373795 b= 11.439814\n",
      "Epoch: 5000 cost= 1.963438749 W= 3.0228853 b= 11.524724\n",
      "Epoch: 5100 cost= 1.893150449 W= 3.0125375 b= 11.609567\n",
      "Epoch: 5200 cost= 1.800761700 W= 2.999554 b= 11.69099\n",
      "Epoch: 5300 cost= 1.826110840 W= 2.9880226 b= 11.770436\n",
      "Epoch: 5400 cost= 1.718632936 W= 2.977614 b= 11.848662\n",
      "Epoch: 5500 cost= 1.741396189 W= 2.9636 b= 11.925114\n",
      "Epoch: 5600 cost= 1.685652852 W= 2.9538183 b= 11.999487\n",
      "Epoch: 5700 cost= 1.694853544 W= 2.9414043 b= 12.071367\n",
      "Epoch: 5800 cost= 1.520098925 W= 2.9319844 b= 12.142838\n",
      "Epoch: 5900 cost= 1.461071968 W= 2.91992 b= 12.211847\n",
      "Epoch: 6000 cost= 1.357613325 W= 2.9111903 b= 12.279675\n",
      "Epoch: 6100 cost= 1.475282669 W= 2.9010105 b= 12.344868\n",
      "Epoch: 6200 cost= 1.343915820 W= 2.892209 b= 12.409323\n",
      "Epoch: 6300 cost= 1.281312704 W= 2.8823316 b= 12.471721\n",
      "Epoch: 6400 cost= 1.285332322 W= 2.8736398 b= 12.532852\n",
      "Epoch: 6500 cost= 1.212053418 W= 2.8630872 b= 12.592061\n",
      "Epoch: 6600 cost= 1.218060493 W= 2.8541899 b= 12.649966\n",
      "Epoch: 6700 cost= 1.172313809 W= 2.847736 b= 12.706566\n",
      "Epoch: 6800 cost= 1.166100621 W= 2.8382943 b= 12.762114\n",
      "Epoch: 6900 cost= 1.098492861 W= 2.829959 b= 12.816151\n",
      "Epoch: 7000 cost= 1.063740015 W= 2.8225312 b= 12.868826\n",
      "Epoch: 7100 cost= 1.023402214 W= 2.8145664 b= 12.919719\n",
      "Epoch: 7200 cost= 0.982637823 W= 2.8071923 b= 12.969754\n",
      "Epoch: 7300 cost= 1.033883810 W= 2.7985566 b= 13.018748\n",
      "Epoch: 7400 cost= 0.994429886 W= 2.792207 b= 13.066607\n",
      "Epoch: 7500 cost= 0.954064608 W= 2.784292 b= 13.113034\n",
      "Epoch: 7600 cost= 0.927848518 W= 2.7786987 b= 13.158699\n",
      "Epoch: 7700 cost= 0.887622297 W= 2.7697585 b= 13.202898\n",
      "Epoch: 7800 cost= 0.881225646 W= 2.7627225 b= 13.245891\n",
      "Epoch: 7900 cost= 0.895305872 W= 2.7579055 b= 13.28829\n",
      "Epoch: 8000 cost= 0.851209164 W= 2.7529163 b= 13.3296385\n",
      "Epoch: 8100 cost= 0.745737910 W= 2.7459857 b= 13.370074\n",
      "Epoch: 8200 cost= 0.795846760 W= 2.7407546 b= 13.409106\n",
      "Epoch: 8300 cost= 0.850925267 W= 2.733101 b= 13.447238\n",
      "Epoch: 8400 cost= 0.762317002 W= 2.7285335 b= 13.484957\n",
      "Epoch: 8500 cost= 0.799837947 W= 2.7227023 b= 13.521192\n",
      "Epoch: 8600 cost= 0.793936789 W= 2.7185183 b= 13.557222\n",
      "Epoch: 8700 cost= 0.703119099 W= 2.7118874 b= 13.591786\n",
      "Epoch: 8800 cost= 0.688881338 W= 2.7092729 b= 13.626094\n",
      "Epoch: 8900 cost= 0.720998645 W= 2.7014139 b= 13.658497\n",
      "Epoch: 9000 cost= 0.728614748 W= 2.698639 b= 13.691119\n",
      "Epoch: 9100 cost= 0.673389077 W= 2.6924767 b= 13.722499\n",
      "Epoch: 9200 cost= 0.665706694 W= 2.6888242 b= 13.75342\n",
      "Epoch: 9300 cost= 0.681291282 W= 2.6839147 b= 13.783423\n",
      "Epoch: 9400 cost= 0.666010678 W= 2.678437 b= 13.812644\n",
      "Epoch: 9500 cost= 0.643584788 W= 2.6734912 b= 13.841193\n",
      "Epoch: 9600 cost= 0.676403344 W= 2.6705093 b= 13.869479\n",
      "Epoch: 9700 cost= 0.583694935 W= 2.6669464 b= 13.896692\n",
      "Epoch: 9800 cost= 0.559415162 W= 2.662542 b= 13.922997\n",
      "Epoch: 9900 cost= 0.641796768 W= 2.6587977 b= 13.94918\n",
      "Epoch: 10000 cost= 0.607424080 W= 2.654848 b= 13.974417\n"
     ]
    }
   ],
   "source": [
    "# Training\n",
    "display_step = 100\n",
    "for step in range(BATCHS):\n",
    "    \n",
    "    x_train, y_train = next_batch(x_data, BATCH_SIZE)\n",
    "    optimizer.apply_gradients(grad(linear_regression, x_train, y_train))\n",
    "\n",
    "    if (step + 1) % display_step == 0 or step == 0:\n",
    "        print(\"Epoch:\", '%04d' % (step + 1), \"cost=\",\n",
    "              \"{:.9f}\".format(mean_square_fn(linear_regression, x_train, y_train)),\n",
    "              \"W=\", w_tfe.numpy(), \"b=\", b_tfe.numpy())\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Results**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1a4302d9b0>]"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(x_data[sample_indx],y_true[sample_indx],'*')\n",
    "plt.plot(x_data, w_tfe*x_data+b_tfe,'r')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python (spinningup)",
   "language": "python",
   "name": "spinningup"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
